package Proyecto;

import java.util.ArrayList;


public class PreferenteProfundidadEvitandoCiclos{
    
    Pila arreglo=new Pila();
    String estado[][];
    long tiempoInicio,duracion;
    int nodosCreados,nodosExpandidos;

    public PreferenteProfundidadEvitandoCiclos(String[][] estado) {
        this.estado = estado;       
    }

    public int RetornarNodosCreados()
    {
      return nodosCreados;
    }

    public int RetornarNodosExpandidos()
    {
      return nodosExpandidos;
    }
    
    public Nodo BusquedaPreferenteProfundidadEvitandoCiclos()
    {
        nodosCreados=0;
        nodosExpandidos=0;
        Nodo actual=new Nodo(estado,0,null,null,0);
        nodosCreados++;
        nodosExpandidos++;
        //arreglo.Ingresar(actual);
        tiempoInicio=System.currentTimeMillis();
        ArrayList <Nodo>hijos=new ArrayList<Nodo>();
        ArrayList <String[][]>recorridos=new ArrayList<String[][]>();
        while(!actual.EsMeta())
        {            
            if(!recorridos.contains(actual.estado)){
               // hijos=actual.expandir();
                hijos=actual.expandirOrdenExpansion();
                nodosExpandidos++;
                nodosCreados+=hijos.size();
                for (int i = 0; i < hijos.size(); i++) {
                    arreglo.Ingresar(hijos.get(i));                
                }
                recorridos.add(actual.estado);
                actual=(Nodo)arreglo.Extraer();
            }
            else actual=(Nodo)arreglo.Extraer();
        }
        duracion=System.currentTimeMillis()-tiempoInicio;
        System.out.println("Meta hallada =D");
        return actual;
    }
    
    
}
